package plp.expressions1.util;

import plp.AppletInterpretadorPLP;
import plp.expressions1.expression.*;
import plp.expressions1.parser.Token;

public class VisitorExpressoes1 implements LinguagemVisitor {

	public static boolean achouErro = false;
	
	//Ver se precisa estar aquis
	public void visit(Expressao exp){
		AppletInterpretadorPLP.SelecionarErro(exp.getLineExpression(),
				exp.getBeginColumnExpression(),
				exp.getEndColumnExpression());
	}
//////-------------------------------------------------------------/////////////////
	/**
	 * visit genérico para as expressões binárias.
	 */
	public void visit(ExpBinaria expBinaria) throws VisitorException {
		if(!achouErro) {
			achouErro = true;
			if (!(expBinaria.getEsq().getTipo() == expBinaria.getTipo())) {
				AppletInterpretadorPLP.SelecionarErro(expBinaria.getEsq().getLineExpression(),
						expBinaria.getEsq().getBeginColumnExpression(),
						expBinaria.getEsq().getEndColumnExpression());
			} else {
				AppletInterpretadorPLP.SelecionarErro(expBinaria.getDir().getLineExpression(),
						expBinaria.getDir().getBeginColumnExpression(),
						expBinaria.getDir().getEndColumnExpression());
			}
		}
	}
	
	/**
	 * visit genérico para as expressões unárias.
	 */
	public void visit(ExpUnaria expUna) {
		if(!achouErro) {
			achouErro = true;
			AppletInterpretadorPLP.SelecionarErro(expUna.getExp().getLineExpression(),
						expUna.getExp().getBeginColumnExpression(),
						expUna.getExp().getEndColumnExpression());
		}
	}

	public void visit(Token token) {
		AppletInterpretadorPLP.SelecionarErro(token.beginLine);
	}
	

	/* O visit do equals é implementado mesmo tendo um genérico para binária, pois não sabemos qual dos lados 
	 * é o que está errado, então marcamos toda a expresão	 */
	public void visit(ExpEquals expEquals) {
		AppletInterpretadorPLP.SelecionarErro(expEquals.getLineExpression());
	}

	//Ver se precisa estar aquis
	@Override
	public void visit(Valor valor) throws VisitorException {
		
	}
//////-------------------------------------------------------------/////////////////
}